//
// Created by wangwanlong on 2024/11/1.
//

#ifndef MKAHYPAR_RATING_HEAVY_NODE_PENALTY_POLICY_H
#define MKAHYPAR_RATING_HEAVY_NODE_PENALTY_POLICY_H
#include "mkahypar/utils/typedef.h"
#include "mkahypar/utils/macros.h"
#include "mkahypar/utils/policy_registry.h"
namespace mkahypar{

  class MultiplicativePenalty final : public meta::PolicyBase {
  public:
    MKAHYPAR_ATTRIBUTE_ALWAYS_INLINE static inline HypernodeWeight penalty(const HypernodeWeight weight_u, const HypernodeWeight weight_v) {
      return weight_u * weight_v;
    }
  };

  class NoWeightPenalty final : public meta::PolicyBase {
  public:
    MKAHYPAR_ATTRIBUTE_ALWAYS_INLINE static inline HypernodeWeight penalty(const HypernodeWeight, const HypernodeWeight) {
      return 1;
    }
  };
}
#endif //MKAHYPAR_RATING_HEAVY_NODE_PENALTY_POLICY_H
